Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Impromptu (programming environment)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Impromptu_(programming_environment)"> <link href="./mw/ext.tmh.player.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Impromptu_programming_environment rootpage-Impromptu_programming_environment skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Impromptu (programming environment)</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}


/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">This article is about the programming language. For other uses, see <a href="Impromptu_(disambiguation)" class="mw-disambig" title="Impromptu (disambiguation)">Impromptu (disambiguation)</a>.</div>
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */


.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}


/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above" style="background-color:#e0e0e0;">Impromptu</th></tr><tr><td colspan="2" class="infobox-image"><span typeof="mw:File"></span></td></tr><tr><th scope="row" class="infobox-label"><a href="Programming_paradigm" title="Programming paradigm">Paradigm</a></th><td class="infobox-data"><a href="Functional_programming" title="Functional programming">Functional</a>, <a href="Multi-paradigm_programming_language" class="mw-redirect" title="Multi-paradigm programming language">multi-paradigm</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_design" title="Software design">Designed&nbsp;by</a></th><td class="infobox-data">Andrew Sorensen</td></tr><tr><th scope="row" class="infobox-label">First&nbsp;appeared</th><td class="infobox-data">2005<span style="display:none">&nbsp;(<span class="bday dtstart published updated">2005</span>)</span></td></tr><tr><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">2.5
</div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label"><a href="Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data"><a href="Dynamic_typing" class="mw-redirect" title="Dynamic typing">Dynamic</a> &amp; <a href="Static_typing" class="mw-redirect" title="Static typing">static</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Operating_system" title="Operating system">OS</a></th><td class="infobox-data"><a href="Mac_OS_X" class="mw-redirect" title="Mac OS X">Mac OS X</a></td></tr><tr><th scope="row" class="infobox-label">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="http://impromptu.moso.com.au">impromptu<wbr>.moso<wbr>.com<wbr>.au</a></span></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */


.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}


/* end https://en.wikipedia.org/ */
</style><div class="hlist"><ul><li><a href="Lisp_programming_language" class="mw-redirect" title="Lisp programming language">Lisp</a></li><li><a href="Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a></li></ul></div></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="Extempore_(software)" title="Extempore (software)">Extempore</a></td></tr></tbody></table>
<p><b>Impromptu</b> is a <a href="Mac_OS_X" class="mw-redirect" title="Mac OS X">Mac OS X</a> <a href="Computer_program" title="Computer program">programming</a> environment for <a href="Live_coding" title="Live coding">live coding</a>. Impromptu is built around the <a href="Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a> language, which is a member of the <a href="Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a> family of languages. The source code of its core has been opened as the <a href="Extempore_(software)" title="Extempore (software)">Extempore project</a>.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Description">Description</h2></div>
<p>The environment allows to make changes to a program at <a href="Run_time_(program_lifecycle_phase)" class="mw-redirect" title="Run time (program lifecycle phase)">runtime</a>, so variables and functions may be redefined and the changes take effect immediately. A programmer can also create and schedule code for future execution, as well as data events such as notes and graphics objects. Once an event is scheduled, execution continues. Looping is performed by using an idiom called "temporal recursion" which works by having a function asynchronously schedule a future call to itself as its final action.
</p><p>The library allows communicating with <a href="Audio_Units" title="Audio Units">Audio Units</a> for audio synthesis, and with graphics layers such as <a href="QuickTime" title="QuickTime">QuickTime</a>, <a href="Quartz_(graphics_layer)" title="Quartz (graphics layer)">Quartz</a>, <a href="Core_Image" title="Core Image">Core Image</a>, <a href="OpenGL" title="OpenGL">OpenGL</a> for <a href="Video_composition" class="mw-redirect" title="Video composition">video composition</a>. Code written in <a href="Objective-C" title="Objective-C">Objective-C</a> can be called from the editor, and also Objective-C frameworks can perform calls to the Scheme interpreter.
</p><p>Impromptu's Scheme interpreter was initially built from the <a href="TinyScheme" title="TinyScheme">TinyScheme</a> 1.35 baseline, but it has been substantially modified since to better suit the live coding context. A real-time <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collector</a>, and <a href="Objective-C" title="Objective-C">Objective-C</a> integration were added. Also, a new statically typed language called the <i>Extempore Language</i> has been integrated to the system. This language is syntactically Scheme-like, but semantically closer to C, and is designed for real-time sound synthesis and other computationally heavy tasks. It provides <a href="Type_inference" title="Type inference">type inference</a> and is compiled to <a href="Machine_language" class="mw-redirect" title="Machine language">machine language</a> by <a href="LLVM" title="LLVM">LLVM</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Sample_performance">Sample performance</h2></div>
<p><i>A Study in Keith</i> is a live coding performance in Impromptu by Andrew Sorensen. The first two minutes (1:56) are silent, while the performer writes the program that will produce the introduction of the piece. From then on, he modifies the code on the fly to evolve the composition.
</p><p><span class="mw-default-size" typeof="mw:File"><span></span></span>
</p>
<div class="mw-heading mw-heading2"><h2 id="Extempore">Extempore</h2></div>
<p>The core of Impromptu has been released as <a href="Extempore_(software)" title="Extempore (software)">Extempore</a> under a BSD style licence. It runs under both <a href="Linux" title="Linux">Linux</a> and Mac OS X. It includes the Scheme interpreter, the Extempore Language compiler and the scheduler. The bindings to <a href="Apple_Inc." title="Apple Inc.">Apple</a> libraries are absent, but the environment can interface with dynamic libraries.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Csound" title="Csound">Csound</a></li>
<li><a href="Comparison_of_audio_synthesis_environments" title="Comparison of audio synthesis environments">Comparison of audio synthesis environments</a></li>
<li><a href="SuperCollider" title="SuperCollider">SuperCollider</a></li>
<li><a href="Processing_(programming_language)" class="mw-redirect" title="Processing (programming language)">Processing (programming language)</a></li>
<li><a href="OpenFrameworks" title="OpenFrameworks">OpenFrameworks</a></li>
<li><a href="ChucK" title="ChucK">ChucK</a></li>
<li><a href="List_of_music_software" title="List of music software">List of music software</a></li>
<li><a href="Max_(software)" title="Max (software)">Max (software)</a></li>
<li><a href="Pure_Data" title="Pure Data">Pure Data</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Academic_papers">Academic papers</h3></div>
<ul><li>Sorensen, A (2010) "<a rel="nofollow" class="external text" href="http://impromptu.moso.com.au/extras/icmc2010.pdf">A Distributed Memory For Networked Livecoding Performance</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210226081451/http://impromptu.moso.com.au/extras/icmc2010.pdf">Archived</a> 2021-02-26 at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a>" International Computer Music Conference 2010, New York</li>
<li>Sorensen, A &amp; Brown, A (2008) "<a rel="nofollow" class="external text" href="http://impromptu.moso.com.au/extras/acmc08_orchestral.pdf">A Computational Model For The Generation Of Orchestral Music In The Germanic Symphonic Tradition: A progress report</a>" paper presented to the Australasian Computer Music Conference 2008, Sydney</li>
<li>Sorensen, A &amp; Brown, A (2007) "<a rel="nofollow" class="external text" href="http://impromptu.moso.com.au/extras/aa-cell-icmc07.pdf">aa-cell in Practice: An Approach to Musical Live Coding</a>" paper presented to the International Computer Music Conference 2007, Copenhagen</li>
<li>Sorensen, A. (2005) "<a rel="nofollow" class="external text" href="http://impromptu.moso.com.au/extras/sorensen_acmc_05.pdf">Impromptu: An interactive programming environment for composition and performance</a>" a paper presented to the Australasian Computer Music Conference 2005, Brisbane: ACMA, pp.&nbsp;149–153. (Note: Impromptu version discussed is obsolete)</li>
<li>Sorensen, A. "<a rel="nofollow" class="external text" href="http://impromptu.moso.com.au/extras/ICR.html">ICR - Impromptu Compiler Runtime</a>"</li>
<li>Thor Magnusson, "<a rel="nofollow" class="external text" href="http://eprints.brighton.ac.uk/10110/">Confessions of a Live Coder</a>", Proceedings of International Computer Music Conference, 2011.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Other_sources">Other sources</h3></div>
<ul><li>Peter Kirn, "<a rel="nofollow" class="external text" href="http://createdigitalmusic.com/2010/07/thought-and-performance-live-coding-music-explained-to-anyone-really/">Thought and Performance, Live Coding Music, Explained to Anyone - Really</a>", Create Digital Music, 2011</li>
<li>Mitchell Whitelaw, "<a rel="nofollow" class="external text" href="http://teemingvoid.blogspot.com/2007/12/from-scratch-conversation-with-andrew.html">From Scratch - A Conversation with Andrew Sorensen</a>", 2007</li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="http://impromptu.moso.com.au">Official website</a></span></span> </li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2024-09-03" href="https://en.wikipedia.org/wiki/?title=Impromptu_(programming_environment)&amp;oldid=1243858205">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>